package main

import (
		"encoding/json"
		"fmt"
		"math/rand"
		"os"
		"time"
)

func main(){


	//设置一个数组，用来存放同学的名字
	str_name := []string{"dlf", "cyj", "lzx", "xy", "fj"}

	//开始读取点名信息
	str_named, err := os.ReadFile("str_named.json")
	if err != nil {
		fmt.Println("读取文件失败:", err)
	}
	//json --> map
	var stuinfo map[string] int
	err = json.Unmarshal([]byte(str_named),&stuinfo)
	if err != nil {
		fmt.Println("json转换失败:",err)
	}
	flag := 1
	//加入时间种子
	//时间戳
	rand.Seed(time.Now().UnixNano())

	//同学的名字被抽到就退出
	for len(str_name) > 0 {
			var choice string
			fmt.Println("按任意键抽取学生姓名(按q退出):")
			fmt.Scanln(&choice)
			if choice == "q" {
				flag = 0
				break
			} else {
			//随机生成一个不超过str_name数组长度的数，生成的数就当作索引，再通过索引来获取对应位置的学生姓名
			index := rand.Intn(len(str_name))
			fmt.Printf("被抽中的学生是:%s \n", str_name[index])

			//通过切片的方式删除这个被抽取的元素
			str_name = append(str_name[:index], str_name[index+1:]...)
			//点名次数 +1
			stuinfo[str_name[index]] += 1
			//map --> json
			stuJsoninfo, err := json.Marshal(stuinfo)
			if err != nil {
				fmt.Printf("map转换失败:", err)
			}
			//写入文件
			err = os.WriteFile("str_named.json", stuJsoninfo, 0644)
			if err != nil {
				fmt.Printf("写入失败:", err)
			}

		}
	}
	if flag == 1 {
		fmt.Println("所有同学都已经抽到了")
	}
}






















	//初始化名字切片列表,设置数组来存放同学的名字
	//str_name := []string{"dlf","cyj","lzx","xy","fj"}
	//for  {
	//	choice := ""
	//	fmt.Scanln(&choice)
	//	if choice == "q" {
	//		break
	//	}else {
	//		if len(str_name)==1 {
	//			fmt.Printf("本次抽取的名字为:%s\n 名单抽取完成",str_name[0])
	//			break
	//
	//		}else {
	//			//获取随机数
	//			randomNumber := rand.Intn(len(str_name))
	//			//获取随机名
	//			getName := str_name[randomNumber]
	//			fmt.Println("本次抽取的名字为:",getName)
	//			//删除抽到的名字，以免抽到重样的
	//			str_name = append(str_name[:randomNumber],str_name[(randomNumber+1):]...)
	//			fmt.Println("剩余名单列表:",str_name)
	//
	//		}
	//	}
	//}



